JSHintでJavascriptの構文チェック&Sublime Text2でのチェック
JSHint
JSHintとは、Javascript用構文チェッカーです。 構文チェッカーとしては、かなり厳しめのチェックをしてくれるJSLintがありますが、 これをforkして融通効くようにしたものがJSHintです。 詳しい経緯はここに。
とりあえずどんなチェックをしてくれるか知りたい場合、 このサイトでJavascriptのコード入力すれば、 どのようなチェックをしてくれるかわかります。 今回はコマンドラインからJSHintを使ってみたり、Sublime Text2から使ってみましょう。
環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.4
- Node.js : v0.10.0
- npm : 1.2.14
- Grunt : 0.4
npmを使用してJSHintをインストールします。 このモジュールはグローバルオプションをつけてインストールしましょう。
% npm install -g jshint
コマンドラインでJSHintを使う
JSHintの設定はホームディレクトリに置かれた.jshintrcファイルにしたがってチェックします。 チェック内容の詳細はここで確認してもらうとして、とりあえず下記の.jshintrcファイルをおいておきましょう。下記ルールに従っていないjsファイルは警告が出ます。
{ "indent" : 2, // インデント "camelcase":true, // キャメルケース "maxlen" : 80, // 一行の最大文字数 "unused" : true, // 宣言のみで使用していない変数を検出 "eqeqeq":true, // ==、!=の使用禁止 "undef" : true, // グローバル変数へのアクセスを禁止 "devel" : true // console、alertを許可 }
.jshintrcを記述したら、チェック対象になるfoo.jsファイルを作成します。
function x(a,b) { return a + b; } res = x(10,20); console.log("res = " + res);
jshintを実行してみてください。先ほどの設定に応じた、いくつかの警告が出ます。
% jshint foo.js foo.js: line 2, col 2, Expected 'return' to have an indentation at 3 instead at 2. foo.js: line 5, col 1, 'res' is not defined. foo.js: line 6, col 24, 'res' is not defined.
Sublime Text2でJSHintによるチェックを行う
jshintコマンドを使えば構文チェックは出来ましたが、いちいちコマンドを入力してチェックするのは面倒です。 SublimeLinterというパッケージを使用すると、JSHintによるチェックをエディタ上で確認することができます。
まずは、Sublime Text2のパッケージコントロール(Shit + Command + p)を起動し、 インストール(Package Controll:Install Package)を選択しましょう。 そこで、SublimeLinterを選択してインストールします。
次に、メニューからSublimeLinterの設定画面を開きます。
設定画面では、次の記述をしてください。JSHintのルールは、ホームディレクトリの.jshintrcが参照されます。
{ "sublimelinter_delay": 0.3, // If true, lines with errors or warnings will have a gutter mark. "sublimelinter_gutter_marks": true, // If true, the find next/previous error commands will wrap. "sublimelinter_wrap_find": true, // Use ~/.jshintrc instead "jshint_options": {} }
では、先ほどのfoo.jsを開いてみましょう。JShintによる警告が一目でわかりますね。ソースを修正すれば、すぐに警告も修正されます。
まとめ
WebStormの場合はJSHint(JSLint)をチェックを行うための設定がありますが、これらを使用すればSublime Text2でも楽に構文チェックができますね。 なお、Grunt用モジュールもあるので、一連のタスクに組み込んでのチェックもできます。
参考サイトなど
- JSHint: https://github.com/jshint/jshint
- SublimeLinter: https://github.com/SublimeLinter/SublimeLinter